/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package formula.one.urjc.mundial;


import java.util.ArrayList;
import formula.one.urjc.carrera.Carrera;
import formula.one.urjc.circuito.Circuito;
import formula.one.urjc.escuderia.Escuderia;
import formula.one.urjc.piloto.Piloto;
import java.io.Serializable;
import java.util.Collections;
import java.util.Comparator;

/**
 *
 * @author Javier Aparicio García
 */

public class Mundial implements Serializable {
    private ArrayList<Circuito> circuitos;
    private ArrayList<Carrera> carreras;
    private ArrayList<Escuderia> escuderias;

    public Mundial(ArrayList<Circuito> circuitos, 
                   ArrayList<Carrera> carreras,
                   ArrayList<Escuderia> escuderias) {
        this.circuitos = circuitos;
        this.carreras = carreras ;
        this.escuderias = escuderias;
    }

    public Mundial(ArrayList<Circuito> circuitos, 
                   ArrayList<Escuderia> escuderias) {
        this.circuitos = circuitos;
        this.carreras = new ArrayList<Carrera>();
        this.escuderias = escuderias;
    }
   
    
    
    public ArrayList<Carrera> getCarreras() {
        return carreras;
    }

    public ArrayList<Circuito> getCircuitos() {
        return circuitos;
    }

    public void setCircuitos(ArrayList<Circuito> circuitos) {
        this.circuitos = circuitos;
    }

    public ArrayList<Escuderia> getEscuderias() {
        return escuderias;
    }

    public void setCarreras(ArrayList<Carrera> carreras) {
        if(carreras==null){
            carreras=new ArrayList<Carrera>();
        }else{
            carreras.clear();
        }
        //creo el listado de carreras
        for(int i=0;i<circuitos.size();i++){
            carreras.add(new Carrera(circuitos.get(i), escuderias));
        }
        this.carreras = carreras;
    }
    
    
    
    private ArrayList<Escuderia> rankingEscuderia(){
        ArrayList<Escuderia> rank=escuderias;
        //llamo a la clase collections para ordenar el arraylist.
        //Le tendré que pasar una clase comparator creada para que me ordene por puntos de escuderia
        Collections.sort(rank, new Comparator() {
	@Override
	public int compare(Object e1, Object e2) {
		return new Integer(((Escuderia)e2).getPuntos()).compareTo(new Integer(((Escuderia)e1).getPuntos()));
	}
        });     
        return rank;
    }
    
    public String rankingToString(){
        String info="";
        ArrayList<Escuderia> clasifEscuderia=rankingEscuderia();
        ArrayList<Piloto> clasifPiloto=rankingPiloto();
        info+="Clasificación Escudería:\n";
        for(int i=0; i<clasifEscuderia.size();i++){
            info+=i+1+"º "+ clasifEscuderia.get(i).getNombre()+"\n";
        }
        info+="Clasificación Pilotos:\n";
        for(int i=0; i<clasifPiloto.size();i++){
            info+=i+1+"º "+ clasifPiloto.get(i).getNombre()+" " +clasifPiloto.get(i).getApellidos()+"\n";
        }
        return info;
    }
    
    private ArrayList<Piloto> rankingPiloto(){
        ArrayList<Piloto> rank=getPilotosCompeticion();
        //llamo a la clase collections para ordenar el arraylist.
        //Le tendré que pasar una clase comparator creada para que me ordene por puntos de escuderia
        Collections.sort(rank, new Comparator() {
	@Override
	public int compare(Object p1, Object p2) {
		return new Integer(((Piloto)p2).getPuntos()).compareTo(new Integer(((Piloto)p1).getPuntos()));
	}
        });
                
        return rank;
    }
    
    private ArrayList<Piloto> getPilotosCompeticion(){
        ArrayList<Piloto> pilotosComepeticion=new ArrayList<Piloto>();
        for(int i=0; i<escuderias.size();i++){
            for(int a=0;a<escuderias.get(i).getListaCompetidores().size();a++){
                pilotosComepeticion.add(escuderias.get(i).getListaCompetidores().get(a).getPiloto());
            }
        }
        return pilotosComepeticion;
    }
    
     public void empezarMundial(){
        for(int i=0; i<circuitos.size();i++){
            carreras.add(new Carrera(circuitos.get(i), escuderias));
        }
         
    }
}
